home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / decprom / ds3100.md / main.c < prev    next >
C/C++ Source or Header  |  1991-08-30  |  2KB  |  100 lines

  1. /* 
  2.  * main.c --
  3.  *
  4.  *    The main program for booting.
  5.  *
  6.  * Copyright 1986 Regents of the University of California
  7.  * All rights reserved.
  8.  */
  9.  
  10. #ifdef  notdef
  11. static char rcsid[] = "$Header: /sprite/src/boot/decprom/ds3100.md/RCS/main.c,v 1.2 90/06/27 14:57:11 shirriff Exp $ SPRITE (Berkeley)";
  12. #endif not lint
  13.  
  14.  
  15. #include "sprite.h"
  16. #include "kernel/machMon.h"
  17. #include "fsBoot.h"
  18. #include "boot.h"
  19. #undef NO_PRINTF
  20.  
  21. extern Fs_Device fsDevice;        /* Global FS device descriptor */
  22.  
  23. void Exit();
  24.  
  25. /*
  26.  *----------------------------------------------------------------------
  27.  *
  28.  * main --
  29.  *
  30.  *      This gets arguments from the PROM, calls other routines to open
  31.  *      and load the program to boot, and then transfers execution to that
  32.  *      new program.
  33.  *
  34.  * Results:
  35.  *    None.
  36.  *
  37.  * Side effects:
  38.  *    None.
  39.  *
  40.  *----------------------------------------------------------------------
  41.  */
  42.  
  43. main(argc,argv,argenv)
  44. int argc;
  45. char **argv;
  46. char **argenv;
  47. {
  48.     ReturnStatus status;
  49.     register int index;            /* Loop index */
  50.     register int entry;            /* Entry point of boot program */
  51.     Fsio_FileIOHandle *handlePtr;    /* Handle for boot program file */
  52.     char *fileName = "vmsprite";
  53.     register char *i;
  54.  
  55.     /*
  56.      * Set up state about the disk.
  57.      */
  58.     Mach_MonPrintf("Performing dec disk boot\n");
  59.     status = FsAttachDisk(&fsDevice);
  60. #ifndef SCSI3_BOOT
  61.     if (status != SUCCESS) {
  62.     Mach_MonPrintf("Can't attach disk, status <0x%x>\n",  status);
  63.     goto exit;
  64.     }
  65.     for (i=argv[0];*i != '\0'; i++) {
  66.     if (i[0]==')' && i[1] != '\0') {
  67.         fileName = i+1;
  68.     }
  69.     }
  70.     Mach_MonPrintf("Open File \"%s\"\n", fileName);
  71. #endif
  72.     /*
  73.      * Open the file to bootstrap.
  74.      */
  75.     status = Fs_Open(fileName, FS_READ, 0, &handlePtr);
  76.     if (status != SUCCESS) {
  77.     Mach_MonPrintf("Can't open \"%s\", <%x>\n", fileName, status);
  78.     goto exit;
  79.     }
  80.     entry = FileLoad(handlePtr);
  81.     if (entry != -1) {
  82.     Mach_MonPrintf("Transferring to location 0x%x\n", entry);
  83.     Boot_Transfer(entry,argc,argv,argenv);
  84.     }
  85. exit:
  86.     return;
  87. }
  88.  
  89. /*
  90.  * Exit is called by start.s
  91.  */
  92. void
  93. Exit()
  94. {
  95.     /*
  96.      * Return to start.s and then the PROM monitor.
  97.      */
  98.     return;
  99. }
  100.